﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AutoMapper;
using NhaThuocOnline.ViewModels;
using NhaThuocOnline.Entities;

namespace NhaThuocOnline.Service
{
    public static class CreateMapperConfiguration
    {
        private static bool mappingConfigured = false;

        public static void Configure()
        {
            // Used to create maps for whole viewmodels
            if (mappingConfigured)
            {
                return;
            }
            //From View --> Entity 
            Mapper.CreateMap<ViewModelsBacSi, BacSi>();
            Mapper.CreateMap<ViewModelsBenhNhan, BenhNhan>(); 
            Mapper.CreateMap<ViewModelsBietDuoc, BietDuoc>();
            Mapper.CreateMap<ViewModelsDieuKienBaoQuan, DieuKienBaoQuan>();
            Mapper.CreateMap<ViewModelsDonViTinh, DonViTinh>();
            Mapper.CreateMap<ViewModelsHoaDonBanHang, HoaDonBanHang>();
            Mapper.CreateMap<ViewModelsHoaDonBanHangChiTiet, HoaDonBanHangChiTiet>();
            Mapper.CreateMap<ViewModelsHoaDonNhapHang, HoaDonNhapHang>();
            Mapper.CreateMap<ViewModelsHoaDonNhapHangChiTiet, HoaDonNhapHangChiTiet>();
            Mapper.CreateMap<ViewModelsHoatChat, HoatChat>();
            Mapper.CreateMap<ViewModelsICD, ICD>();
            Mapper.CreateMap<ViewModelsICDVaHoaDonBanHang, ICDVaHoaDonBanHang>();
            Mapper.CreateMap<ViewModelsLoaiSanPham, LoaiSanPham>();
            Mapper.CreateMap<ViewModelsNhaSanXuat, NhaSanXuat>();
            Mapper.CreateMap<ViewModelsNhaThuoc, NhaThuoc>();            
            Mapper.CreateMap<ViewModelsNhomDieuTri, NhomDieuTri>();
            Mapper.CreateMap<ViewModelsNuocSanXuat, NuocSanXuat>();
            Mapper.CreateMap<ViewModelsQuyCachDongGoi, QuyCachDongGoi>();
            Mapper.CreateMap<ViewModelsUserInfo, UserInfo>();
            //From List<View> --> List<Entity>
            Mapper.CreateMap<List<ViewModelsBacSi>, List<BacSi>>();
            Mapper.CreateMap<List<ViewModelsBenhNhan>, List<BenhNhan>>();
            Mapper.CreateMap<List<ViewModelsBietDuoc>, List<BietDuoc>>();
            Mapper.CreateMap<List<ViewModelsDieuKienBaoQuan>, List<DieuKienBaoQuan>>();
            Mapper.CreateMap<List<ViewModelsDonViTinh>, List<DonViTinh>>();
            Mapper.CreateMap<List<ViewModelsHoaDonBanHang>, List<HoaDonBanHang>>();
            Mapper.CreateMap<List<ViewModelsHoaDonBanHangChiTiet>, List<HoaDonBanHangChiTiet>>();
            Mapper.CreateMap<List<ViewModelsHoaDonNhapHang>, List<HoaDonNhapHang>>();
            Mapper.CreateMap<List<ViewModelsHoaDonNhapHangChiTiet>, List<HoaDonNhapHangChiTiet>>();
            Mapper.CreateMap<List<ViewModelsHoatChat>, List<HoatChat>>();
            Mapper.CreateMap<List<ViewModelsICD>, List<ICD>>();
            Mapper.CreateMap<List<ViewModelsICDVaHoaDonBanHang>, List<ICDVaHoaDonBanHang>>();
            Mapper.CreateMap<List<ViewModelsLoaiSanPham>, List<LoaiSanPham>>();
            Mapper.CreateMap<List<ViewModelsNhaSanXuat>, List<NhaSanXuat>>();
            Mapper.CreateMap<List<ViewModelsNhaThuoc>, List<NhaThuoc>>();            
            Mapper.CreateMap<List<ViewModelsNhomDieuTri>, List<NhomDieuTri>>();
            Mapper.CreateMap<List<ViewModelsNuocSanXuat>, List<NuocSanXuat>>();
            Mapper.CreateMap<List<ViewModelsQuyCachDongGoi>, List<QuyCachDongGoi>>();
            Mapper.CreateMap<List<ViewModelsUserInfo>, List<UserInfo>>();
            //From Entity --> ViewModel 
            Mapper.CreateMap<BacSi, ViewModelsBacSi>();
            Mapper.CreateMap<BenhNhan, ViewModelsBenhNhan>();
            Mapper.CreateMap<BietDuoc, ViewModelsBietDuoc>();
            Mapper.CreateMap<DieuKienBaoQuan, ViewModelsDieuKienBaoQuan>();
            Mapper.CreateMap<DonViTinh, ViewModelsDonViTinh>();
            Mapper.CreateMap<HoaDonBanHang, ViewModelsHoaDonBanHang>();
            Mapper.CreateMap<HoaDonBanHangChiTiet, ViewModelsHoaDonBanHangChiTiet>();
            Mapper.CreateMap<HoaDonNhapHang, ViewModelsHoaDonNhapHang>();
            Mapper.CreateMap<HoaDonNhapHangChiTiet, ViewModelsHoaDonNhapHangChiTiet>();
            Mapper.CreateMap<HoatChat, ViewModelsHoatChat>();
            Mapper.CreateMap<ICD, ViewModelsICD>();
            Mapper.CreateMap<ICDVaHoaDonBanHang, ViewModelsICDVaHoaDonBanHang>();
            Mapper.CreateMap<LoaiSanPham, ViewModelsLoaiSanPham>();
            Mapper.CreateMap<NhaSanXuat, ViewModelsNhaSanXuat>();
            Mapper.CreateMap<NhaThuoc, ViewModelsNhaThuoc>();          
            Mapper.CreateMap<NhomDieuTri, ViewModelsNhomDieuTri>();
            Mapper.CreateMap<NuocSanXuat, ViewModelsNuocSanXuat>();
            Mapper.CreateMap<QuyCachDongGoi, ViewModelsQuyCachDongGoi>();
            Mapper.CreateMap<UserInfo, ViewModelsUserInfo>();
            //From List<Entity> --> List<ViewModels>
            Mapper.CreateMap<List<BacSi>, List<ViewModelsBacSi>>();
            Mapper.CreateMap<List<BenhNhan>, List<ViewModelsBenhNhan>>();
            Mapper.CreateMap<List<BietDuoc>, List<ViewModelsBietDuoc>>();
            Mapper.CreateMap<List<DieuKienBaoQuan>, List<ViewModelsDieuKienBaoQuan>>();
            Mapper.CreateMap<List<DonViTinh>, List<ViewModelsDonViTinh>>();
            Mapper.CreateMap<List<HoaDonBanHang>, List<ViewModelsHoaDonBanHang>>();
            Mapper.CreateMap<List<HoaDonBanHangChiTiet>, List<ViewModelsHoaDonBanHangChiTiet>>();
            Mapper.CreateMap<List<HoaDonNhapHang>, List<ViewModelsHoaDonNhapHang>>();
            Mapper.CreateMap<List<HoaDonNhapHangChiTiet>, List<ViewModelsHoaDonNhapHangChiTiet>>();
            Mapper.CreateMap<List<HoatChat>, List<ViewModelsHoatChat>>();
            Mapper.CreateMap<List<ICD>, List<ViewModelsICD>>();
            Mapper.CreateMap<List<ICDVaHoaDonBanHang>, List<ViewModelsICDVaHoaDonBanHang>>();
            Mapper.CreateMap<List<LoaiSanPham>, List<ViewModelsLoaiSanPham>>();
            Mapper.CreateMap<List<NhaSanXuat>, List<ViewModelsNhaSanXuat>>();
            Mapper.CreateMap<List<NhaThuoc>, List<ViewModelsNhaThuoc>>();            
            Mapper.CreateMap<List<NhomDieuTri>, List<ViewModelsNhomDieuTri>>();
            Mapper.CreateMap<List<NuocSanXuat>, List<ViewModelsNuocSanXuat>>();
            Mapper.CreateMap<List<QuyCachDongGoi>, List<ViewModelsQuyCachDongGoi>>();
            Mapper.CreateMap<List<UserInfo>, List<ViewModelsUserInfo>>();
            mappingConfigured = true;
        }

        public static void Reset()
        {
            Mapper.Reset();
            mappingConfigured = false;
        }
    }
}
